#pragma once

#include <vector>

#include "buffer.h"

namespace safe_udp
{
  class SlidingWindow
  {
  public:
    SlidingWindow();
    ~SlidingWindow();

    int AddToBuffer(const SlidWinBuffer &buffer);

    std::vector<SlidWinBuffer> sliding_window_buffers_;
    int last_packet_sent_;  // 最后发送的数据包的指针,其实就是数组下标
    int last_acked_packet_; // 最后确认收到的数据包的指针
    // 第一个未确认的数据包的指针
    int send_base_; // 发送成功且已经确认的数据包中的 最新 的序列号
    int dup_ack_;   // 重复确认计数，用于快速重传等机制
  };
} // namespace safe_udp
